package photoPrint;
import java.io.Serializable;
import dataStructures.Queue;

/**
 * 
 */

/**
 * Tipo abstracto de dados que representa uma impressora
 * 
 * @author filiperosa
 *
 */
public interface TADPrinter extends Serializable {
	
	/**
	 * Retorna o nome da impressora
	 * @return name
	 */
	String getName();
	
	/**
	 * Retorna a localizacao da impressora
	 * @return location 
	 */
	String getLocation();
	
	/**
	 * Retorna a largura maxima de impressao
	 * @return maxWidth
	 */
	int maxWidth();
	
	/**
	 * Retorna a altura maxima de impressao
	 * @return maxHeight
	 */
	int maxHeight();
	
	/**
	 * Retorna o numero de fotos que a impressora ainda pode imprimir
	 * @return remainingPrints
	 */
	int remainingPrints();
	
	/**
	 * Retorna o valor de manutencao
	 * @return maintenanceValue
	 */
	int maintenanceValue();


	/**
	 * Faz a manutencao da impressora se esta precisar
	 */
	boolean maintenance();
	
	/**
	 * Adiciona um album a fila de espera da impressora
	 * @param album
	 * @return resultado da operacao
	 */
	int addAlbum(TADAlbum album);
	
	/**
	 * Retorna o numero de fotos em fila de espera
	 * @return photosToPrint
	 */
	int photosToPrint();
	
	/**
	 * Retorna os albuns em fila de espera
	 * @return stack
	 */
	Queue<TADAlbum> print();
	
	/**
	 * Verifica se a impressora precisa de manutencao, se sim, retorna true, e false caso contrario
	 * @return resultado da operacao
	 */
	boolean needsMaintenance();

}
